package cn.steel.mapper;

import cn.steel.domain.entity.Order;
import cn.steel.domain.vo.OrderDetailVo;
import cn.steel.domain.vo.OrderListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface OrderMapper {
    List<Order> findByBuyerId(@Param("buyerId") Long buyerId);
    List<Order> findByIds(@Param("orderIds") List<Long> orderIds);
    long countOrdersBySupplierId(Long supplierId);
    //插入订单
    int insert(Order order);
    // 更新订单
    int update(Order order);
    // 根据订单号查询订单
    Order selectByOrderNo(String orderNo);
    //  根据用户ID查询订单列表
    List<OrderListVo> selectOrderListByUserId(@Param("userId") Long userId, @Param("status") String status);
    // 根据订单号查询订单详情
    OrderDetailVo selectOrderDetail(@Param("orderNo") String orderNo, @Param("userId") Long userId);
    // 根据供应商ID和订单号查询订单详情
    OrderDetailVo selectSupplierOrderDetail(@Param("orderNo") String orderNo, @Param("supplierId") Long supplierId);
    // 根据订单号更新订单状态
    int updateOrderStatus(@Param("orderNo") String orderNo, @Param("status") String status);
    //  根据订单号更新物流信息
    int updateShippingInfo(@Param("orderNo") String orderNo,
                           @Param("shippingCompany") String shippingCompany,
                           @Param("trackingNumber") String trackingNumber,
                           @Param("shippingAddress") String shippingAddress);


    //  根据订单号查询订单
    Order getOrderByOrderNo(String orderNo);
    // 根据订单号删除订单
    int deleteByOrderNo(@Param("orderNo") String orderNo);

    // 根据订单ID查询订单
    @Select("SELECT * FROM `order` WHERE id = #{id}")
    Order selectById(Long id);
    // 根据订单ID查询订单详情
    List<OrderListVo> selectOrderList(@Param("userId") Long userId, @Param("status") String status);

    //  根据供应商ID查询订单
    List<OrderListVo> selectSupplierOrderList(@Param("supplierId") Long supplierId, @Param("status") String status);
    Order getOrderById(Long id);

    void deleteOrderByOrderNo(String orderNo);

    int deleteSupplierOrder(@Param("orderNo") String orderNo, @Param("supplierId") Long supplierId);



}